home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / Visual Cafe Pro v1.0 / TUTORIAL.BIN / Firework.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-16  |  3.2 KB  |  146 lines

  1. package symantec.itools.multimedia;
  2.  
  3. import java.awt.Canvas;
  4. import java.awt.Color;
  5. import java.awt.Component;
  6. import java.awt.Dimension;
  7. import java.awt.Graphics;
  8. import symantec.itools.lang.OS;
  9.  
  10. public class Firework extends Canvas implements Runnable {
  11.    public int AnimationSpeed = 10;
  12.    public int RocketStyleVariability = 10;
  13.    public int MaxRocketNumber = 9;
  14.    public int MaxRocketExplosionEnergy = 850;
  15.    public int MaxRocketPatchNumber = 90;
  16.    public int MaxRocketPatchLength = 68;
  17.    public int Gravity = 400;
  18.    private Rocket[] rocket;
  19.    private boolean rocketsCreated = false;
  20.    private Thread launcher;
  21.    private boolean suspend = false;
  22.  
  23.    public void addNotify() {
  24.       super.addNotify();
  25.       this.launcher = new Thread(this);
  26.       this.launcher.start();
  27.    }
  28.  
  29.    public synchronized void removeNotify() {
  30.       if (this.launcher != null) {
  31.          this.launcher.stop();
  32.          this.launcher = null;
  33.       }
  34.  
  35.       super.removeNotify();
  36.    }
  37.  
  38.    public synchronized void show() {
  39.       super.show();
  40.       if (((Component)this).isVisible() && this.launcher != null) {
  41.          this.launcher.resume();
  42.       }
  43.  
  44.    }
  45.  
  46.    public synchronized void hide() {
  47.       super.hide();
  48.       if (!((Component)this).isVisible() && this.launcher != null) {
  49.          this.suspend = true;
  50.       }
  51.  
  52.    }
  53.  
  54.    void createRockets() {
  55.       this.rocketsCreated = true;
  56.       Rocket[] var1 = new Rocket[this.MaxRocketNumber];
  57.       Dimension var2 = ((Component)this).size();
  58.  
  59.       for(int var3 = 0; var3 < this.MaxRocketNumber; ++var3) {
  60.          var1[var3] = new Rocket(var2.width, var2.height, this.Gravity);
  61.       }
  62.  
  63.       this.rocket = var1;
  64.    }
  65.  
  66.    public synchronized void reshape(int var1, int var2, int var3, int var4) {
  67.       super.reshape(var1, var2, var3, var4);
  68.       this.rocketsCreated = false;
  69.    }
  70.  
  71.    public void run() {
  72.       int var2 = (int)(Math.random() * (double)this.MaxRocketExplosionEnergy * (double)3.0F / (double)4.0F) + this.MaxRocketExplosionEnergy / 4 + 1;
  73.       int var3 = (int)(Math.random() * (double)this.MaxRocketPatchNumber * (double)3.0F / (double)4.0F) + this.MaxRocketPatchNumber / 4 + 1;
  74.       int var4 = (int)(Math.random() * (double)this.MaxRocketPatchLength * (double)3.0F / (double)4.0F) + this.MaxRocketPatchLength / 4 + 1;
  75.       long var5 = (long)(Math.random() * (double)10000.0F);
  76.       Graphics var8 = null;
  77.  
  78.       while(true) {
  79.          if (var8 == null) {
  80.             var8 = ((Component)this).getGraphics();
  81.          }
  82.  
  83.          if (this.suspend) {
  84.             this.suspend = false;
  85.             this.launcher.suspend();
  86.          }
  87.  
  88.          if (!this.rocketsCreated) {
  89.             this.createRockets();
  90.          }
  91.  
  92.          if (this.rocketsCreated && var8 != null) {
  93.             Dimension var9 = ((Component)this).size();
  94.             if (OS.isMacintosh()) {
  95.                var8.clipRect(0, 0, var9.width, var9.height);
  96.             }
  97.  
  98.             try {
  99.                Thread.sleep((long)(100 / this.AnimationSpeed));
  100.             } catch (InterruptedException var11) {
  101.             }
  102.  
  103.             boolean var7 = true;
  104.  
  105.             for(int var1 = 0; var1 < this.MaxRocketNumber; ++var1) {
  106.                var7 = var7 && this.rocket[var1].sleep;
  107.             }
  108.  
  109.             if (var7 && Math.random() * (double)100.0F < (double)this.RocketStyleVariability) {
  110.                var2 = (int)(Math.random() * (double)this.MaxRocketExplosionEnergy * (double)3.0F / (double)4.0F) + this.MaxRocketExplosionEnergy / 4 + 1;
  111.                var3 = (int)(Math.random() * (double)this.MaxRocketPatchNumber * (double)3.0F / (double)4.0F) + this.MaxRocketPatchNumber / 4 + 1;
  112.                var4 = (int)(Math.random() * (double)this.MaxRocketPatchLength * (double)3.0F / (double)4.0F) + this.MaxRocketPatchLength / 4 + 1;
  113.                var5 = (long)(Math.random() * (double)10000.0F);
  114.             }
  115.  
  116.             for(int var12 = 0; var12 < this.MaxRocketNumber; ++var12) {
  117.                Rocket var10 = this.rocket[var12];
  118.                if (var10.sleep && Math.random() * (double)this.MaxRocketNumber * (double)var4 < (double)1.0F) {
  119.                   var10.init(var2, var3, var4, var5);
  120.                   var10.start();
  121.                }
  122.  
  123.                if (this.rocketsCreated) {
  124.                   var10.show(var8);
  125.                }
  126.             }
  127.          }
  128.       }
  129.    }
  130.  
  131.    public void freezeRockets() {
  132.       this.suspend = true;
  133.    }
  134.  
  135.    public void unfreezeRockets() {
  136.       this.launcher.resume();
  137.    }
  138.  
  139.    public void paint(Graphics var1) {
  140.       Dimension var2 = ((Component)this).size();
  141.       var1.clipRect(0, 0, var2.width, var2.height);
  142.       var1.setColor(Color.black);
  143.       var1.fillRect(0, 0, var2.width + 1, var2.height + 1);
  144.    }
  145. }
  146.